package com.sure0000.java8;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Optional;

/**
 * @author xuyouchang
 * @date 2020/11/4.
 */
public class OptionalDemo {
    private static final Logger logger = LoggerFactory.getLogger(OptionalDemo.class);

    /**
     * orElse 与 orElseGet 区别
     * 当对象为空而返回默认对象时，行为并无差异。
     * 两个 Optional  对象都包含非空值，两个方法都会返回对应的非空值。不过，orElse() 方法仍然创建了 User 对象。
     * 与之相反，orElseGet() 方法不创建 User 对象。
     */
    @Test
    public void givenPresentValue_whenCompare_thenOk() {
        User user = new User("john@gmail.com", "1234");
        logger.info("Using orElse");
        User result = Optional.ofNullable(user).orElse(createNewUser());
        logger.info("Using orElseGet");
        User result2 = Optional.ofNullable(user).orElseGet(() -> createNewUser());
    }

    private User createNewUser() {
        logger.info("Creating New User");
        return new User("extra@gmail.com", "1234");
    }
}
